package com.erp.framework.util;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;

import com.erp.framework.SimpleConstants;

public final class DateConverter implements Converter, SimpleConstants{

    private Object defaultValue = null;
    private boolean useDefault = true;
    
      
    /**
     * Create a {@link Converter} that will throw a {@link ConversionException}
     * if a conversion error occurs.
     */
    public DateConverter() {

        this.defaultValue = null;
        this.useDefault = false;

    }


    /**
     * Create a {@link Converter} that will return the specified default value
     * if a conversion error occurs.
     *
     * @param defaultValue The default value to be returned
     */
    public DateConverter(Object defaultValue) {

        this.defaultValue = defaultValue;
        this.useDefault = true;

    }


    // --------------------------------------------------------- Public Methods


    /**
     * Convert the specified input object into an output object of the
     * specified type.
     *
     * @param type Data type to which this value should be converted
     * @param value The input value to be converted
     *
     * @exception ConversionException if conversion cannot be performed
     *  successfully
     */
    public Object convert(Class type, Object value) {

        if (value == null) {
            if (useDefault) {
                return (defaultValue != null ? defaultValue : new Date(System.currentTimeMillis()));
            } else {
                throw new ConversionException("No value specified");
            }
        }

        SimpleDateFormat formatter = new SimpleDateFormat(SimpleConstants.INPUT_DATE_FORMAT);
        formatter.setLenient(false);
        ParsePosition pos = new ParsePosition(0);
        Date d = formatter.parse((String)value, pos);
        if (pos.getErrorIndex() == -1 && pos.getIndex() == ((String)value).length() )
            return d;
        else {
            if (useDefault) {
                return (defaultValue);
            } else {
                throw new ConversionException("Error in convert string to date");
            }
        }
      
    }
    
//    public DateConverter() {
//        this.defaultValue = null;
//        this.useDefault = false;
//    }
//
//    public DateConverter(Object defaultValue) {
//        this.defaultValue = defaultValue;
//        this.useDefault = true;
//    }
//
//    public Object convert(Class type, Object value) {
//
//        if (value == null) {
//            if (useDefault) {
//                return (defaultValue != null ? defaultValue : new Date(System.currentTimeMillis()));
//            } else {
//                throw new ConversionException("No value specified");
//            }
//        }
//
//        SimpleDateFormat formatter = new SimpleDateFormat(CommonUtil.INPUT_DATE_FORMAT);
//        formatter.setLenient(false);
//        ParsePosition pos = new ParsePosition(0);
//        Date d = formatter.parse((String) value, pos);
//        if (pos.getErrorIndex() == -1 && pos.getIndex() == ((String) value).length())
//            return d;
//        else {
//            if (useDefault) {
//                return (defaultValue);
//            } else {
//                throw new ConversionException("Error in convert string to date");
//            }
//        }
//
//    }
}
